//NGUYEN François TP4

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void RemplirTableauAvecEntiersAleatoires (int * tab, int taille, int valeurMax)

/* Préconditions  : tab est un tableau pouvant contenir "taille" entiers.
   Postconditions : tab est rempli avec des nombres entiers aleatoires compris entre 0 (inclus) et valeurMax (exclue).*/
   
{
  int i;
  for (i=0; i< taille;i++ )
    { 
      tab[i]= rand()/((int)(valeurMax + 1));
    }
}

void affichertableau (int * tab, int taille) //permet de visualiser le tableau.
/* Préconditions  : tab est un tableau contenant "taille" entiers.
   Postconditions : Affiche chaques éléments du tableau. */
{ 
 int i; 
 for (i = 0; i < taille; i++)
   {
     printf(" %d \n", tab[i]);
   }

}


void TriInsertion(int * tab, int taille)


/* Preconditions : tab est un tableau contenant "taille" entiers.
   Postconditions : Chaques élement de tab sont rangés dans l'ordre croissant grâce à l'algorithme du trie par insertion. */
{
  int i, j, ele_a_placer;
    for (i=0; i<taille; i++)
      {
       ele_a_placer = tab[i];
       j=i-1;
    while (j>=0 && tab[j]>ele_a_placer)
         {
           tab[j+1]=tab[j];
            j=j-1;
         }
       tab[j+1]=ele_a_placer;

      }	
//affichertableau (tab,taille);

}




void trieparselectionduminimum(int * tab, int taille)

/* Preconditions : tab est un tableau contenant "taille" entiers.
   Postconditions : Chaques élements de tab sont rangés dans l'ordre croissant grâce a l'algorithme du trie par selection du minimum.*/
{
   int i, j, indmin;
   int mini;

   for (i=0; i<taille; i++)
      {
       indmin = i;
       for( j=(i+1); j<taille+1; j++)
          {
           if(tab[j] < tab[indmin])
             {
              indmin = j;
             }
           }
       mini = tab[indmin];
       tab[indmin] = tab[i];
       tab[i] = mini;

       }
//affichertableau(tab,taille);

}


int main ()

{ 
  int indice;
  int ind;
  int * tab;
  int taille;
  int ValeurMax;
  clock_t start,finish;
  ValeurMax = 1000000;
  printf("Donnez la taille souhaité pour le tableau \n");
  scanf ("%d", &taille);
  tab = (int*)malloc(taille*sizeof(int));
  printf("Le tableau va être remplit  avec des entiers aléatoires compris entre 0 et 1 000 000 \n");

RemplirTableauAvecEntiersAleatoires (tab, taille, ValeurMax);

affichertableau (tab, taille);

printf("Quel algorithme souhaitez vous utiliser, 0 pour le tri par selection, 1 pour le tri par insertion \n");
ind = scanf ("%d", &indice);
start = clock();

if (ind == 0) 
 { 
   trieparselectionduminimum(tab, taille); 
   
 }
else if (ind == 1)
 { 
   TriInsertion (tab,taille);
  
 }
finish = clock ();
   printf("ca a prie %d secondes pour trier.\n",(finish - start) / CLOCKS_PER_SEC);
return 0;

}


